<?php
# ============================================================================
# 版权所有 Chilcoo.com，并保留所有权利。
# 网站地址: http:#www.chilcoo.com/ccerp
# ----------------------------------------------------------------------------
# 这不是一个自由软件！你不能通过任何方式破解本软件.
# 使用:不允许对程序代码以任何形式任何目的的再发布。
# ============================================================================
# $Author: Chilcoo Inc. *
# $Official website  : www.chilcoo.com
# 
# 文件信息:
# File : /include/database.class.php
# **数据库处理文件**
#
# 注意：此类只兼容PHP5.00以上版本

class db{
	//公有属性 为更好的实现实现封装 所有类的属性变量也设置为私有，通过__set()和__get()来提供外界访问
	private $db_error;
	private $db_errorno;
	private $server_info;       //数据库服务器版本号
	private $query_nums=0;
	//私有成员变量
	private $_conn = "";
	private $_host;
	private $_uid;
	private $_pwd;
	private $_database;
	

	/*初始化
	$h 服务器
	$u 帐号
	$p 密码
	$dbname 数据库名
	$autoconnect 是否自动连接 默认为true
	*/
	function __construct($host,$uid,$pwd,$database,$autoconnect=true){
		$this->_host =$host;
		$this->_uid=$uid;
		$this->_pwd=$pwd;
		$this->_database=$database;
		$autoconnect && $this->_conn = $this->connect($host,$uid,$pwd,$database);
		$this->server_info =   $this->server_info();
	}

	//外部为属性赋值
	function __set($name,$value){
	}
	//外部获取属性
	function __get($name){
		if($name=="query_nums") return $this->query_nums;//使用查询的次数
		if($name=="server_info") return $this->server_info;
	}

	//成员函数
	public function connect($host,$uid,$pwd,$database){
		//连接服务器
		$conn = @mysql_connect($host,$uid,$pwd);
		mysql_errno()!=0 && $this->halt("error_connect",$host);

		//设置字符集
		//mysql5
		mysql_query("SET sql_mode=''");

		if($database){
		       !@mysql_select_db($database) && $this->halt("error_select_db",$database);
		}
		mysql_query("SET NAMES 'UTF8'");

		return $conn;
	}

	//关闭数据库连接
	public function close(){
		return mysql_close($this->_conn);
	}
	
	//选择数据库
	public function select_db($database){
		!@mysql_select_db($database,$this->_conn) && $this->halt("error_select_db",$database);
	}

	public function query($sql,$method=''){
		if($method == "U_Q" && function_exists('mysql_unbuffered_query')){
		$result = mysql_unbuffered_query($sql,$this->_conn);
		}else{
		$result = mysql_query($sql,$this->_conn);
		}

		$this->query_nums++;

		if(!$result) $this->halt("error_sql",$sql);

		return $result;
	}

	/*取一条记录
		参数：$sql查询语句
		$conn 连接资源
		返回值：此条记录集数组
	*/
	public function get_one($sql){
		$result=$this->query($sql,"U_Q");

		$rs = mysql_fetch_array($result,MYSQL_ASSOC);
		return $rs;
	}
	/*
	Select查询函数
	参数：$sql 查询语句，$conn连接资源
	返回值：记录集数组 或 false
	*/
	function select($sql){
		if(empty($sql)) return false;
			$result = $this->query($sql);

		if(!$result || empty($result)){
			@mysql_free_result($result);
			return false;
		}

		$record_num = 0;
		$recordsets =array();

		while($rs = @mysql_fetch_array($result , MYSQL_ASSOC)){
			$recordsets[$record_num] = $rs ;
			$record_num++;
		}

		@mysql_free_result($result);

		return $recordsets;
	}

	/*
	insert 函数
	参数：$sql 插入的SQL语句
	返回值：insert的新记录的id 出错则返回false
	*/
	function insert($sql){

		if( empty($sql)) return false;
		$re = $this->query($sql);
		if( !$re){
			return false;
		}else{
			return @mysql_insert_id($this->_conn);
		}
	}

	function update($sql){
		if(empty($sql)) return false;
		$this->query($sql);
		return mysql_affected_rows($this->_conn);
	}

	function delete($sql){
		if(empty($sql)) return false;

		@$this->query($sql);

		return mysql_affected_rows();
	}
	
	function check($sql) {  //附加功能 - 防注入
		$check = eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql); //过滤危险语句
		if($check){
			echo "Warning : Risk statement.";
			exit();
		}else{
			return htmlspecialchars($sql,ENT_QUOTES); //格式化HTML
		}
	}
	
	function count($sql){
		if(empty($sql)) return false;
		$re = $this->query($sql);
		return mysql_num_rows($re);
	}
	
	//获取服务器版本信息
	private function server_info(){
		$client_ver = mysql_get_client_info();
		$server_ver = mysql_get_server_info();

		$info = array(
		  "client_ver" => $client_ver,
		  "server_ver" => $server_ver,
		);
		return $info;
	}


	private function halt($msg_str='',$on_str=""){
		$sqlerror = mysql_error();
		$sqlerrorno = mysql_errno();
		//定义错误字符串数组
		   $msg = array(
		    "error_connect" => "There happened something wrong when connect to database server <u>$on_str</u> !",
		    "error_select_db" => "Can not use database:$on_str",
		    "error_sql" => "Query Error:<br />$on_str",
		);
		echo"<html><head><title>SQL ERROR/title><style type='text/css'>P,BODY{FONT-FAMILY:tahoma,arial,sans-serif;FONT-SIZE:11px;}A { TEXT-DECORATION: none;}a:hover{ text-decoration: underline;}TD { BORDER-RIGHT: 1px; BORDER-TOP: 0px; FONT-SIZE: 16pt; COLOR: #000000;}</style><body>\n\n";
		echo"<table style='TABLE-LAYOUT:fixed;WORD-WRAP: break-word'><tr><td>{$msg[$msg_str]}";
		echo"<br /><br /><b>The URL Is</b>:<br>http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}";
		echo"<br><br /><b>MySQL Server Error Message</b>:<br>$sqlerror   ( $sqlerrno )";
		echo"<br /><br /><b>You Can Get Help In</b>:<br /><a target=_blank href=http://www.chilcoo.com><b>http://www.chilcoo.com</b></a>";
		echo"</td></tr></table>";
		exit;
	}
	
}
?>